home *** CD-ROM | disk | FTP | other *** search
/ F1 Licenseware / F1 Licenseware - Volume 1.iso / disks / 049a.dms / 049a.adf / SOURCE_CODE / MED.AMOS / MED.amosSourceCode < prev    next >
AMOS Source Code  |  1992-02-26  |  5KB  |  226 lines

  1. '****************************************************************************' 
  2. '*           AMOS MED Module Player                                         *
  3. '*           Copyright (c) 1992 by Michael David Cox                        *
  4. '*           March 22, 1992 11:47am CST                                     *
  5. '****************************************************************************
  6. Break Off 
  7. Screen Open 0,640,400,2,Hires
  8. Curs Off : Flash Off 
  9. Led On 
  10. _SMALL_COPYRIGHT[225]
  11. Fade 1 : Wait 16
  12. Auto View Off : Unpack 6 To 0 : Screen Clone 1 : Screen To Front 0
  13. For C=0 To 31
  14.    Colour C,0
  15. Next 
  16. View : Auto View On 
  17. Curs Off : Flash Off 
  18. Fade 3 To 1 : Screen Close 1
  19. Wait 250 : ERASBANK
  20. '*************************************************** 
  21. MED_PLAYER_OFFSETS:
  22. FRE_PLAYER=-$24
  23. GT_PLAYER=-$1E
  24. PLY_MODULE=-$2A
  25. CONT_MODULE=-$30
  26. ST0P_PLAYER=-$36
  27. DM_OFF_PLAYER=-$3C
  28. SET_TEMPO=-$42
  29. L0AD_MODULE=-$48
  30. UNL0AD_MODULE=-$4E
  31. GT_CURRENT_MODULE=-$54
  32. RESET_MIDI=-$5A
  33. '****************************************************
  34. EXEC_LIB_OFFSETS:
  35. OPEN_LIBRARY=-$228
  36. CL0SE_LIBRARY=-$19E
  37. '****************************************************
  38. OPENLIBRARY
  39. BEGINNING:
  40. M0DULE$=Fsel$("*.MED","","Load a 4-channel","MED Module")
  41. If M0DULE$=""
  42.    CL0SELIBRARY
  43.    For HEYBER=9 To 15
  44.       Erase HEYBER
  45.    Next HEYBER
  46.    Run "Amoner005:autoexec.amos"
  47. End If 
  48. If Not Exist(M0DULE$)
  49.    Locate 0,24
  50.    Centre "Song does not exist.  Press any key to retry."
  51.    Wait Key 
  52.    Locate 0,24 : Cline 
  53.    Goto BEGINNING
  54. End If 
  55. M0DULE$=M0DULE$+Chr$(0)
  56. Open Random 1,M0DULE$
  57. M0DULE_LENGTH=Lof(1)
  58. Close 1
  59. If Chip Free<M0DULE_LENGTH
  60.    Cls 
  61.    Centre "Not enough CHIP RAM.  Press any key to exit."
  62.    Wait Key 
  63.    CL0SELIBRARY
  64.    For HEYBER=9 To 15
  65.       Erase HEYBER
  66.    Next HEYBER
  67.    Run "amoner005:autoexec.amos"
  68. End If 
  69. M0DULE_POINTER=Varptr(M0DULE$)
  70. '
  71. ' First, we get the MEDPlayer routine
  72. _GET_PLAYER[MED_LIB_POINTER]
  73. '
  74. ' Second, we load the module.  We use the MED routine as the module has to 
  75. ' be relocated in order to work properly.
  76. _LOAD_MODULE[MED_LIB_POINTER,M0DULE_POINTER]
  77. '
  78. '_LOAD_MODULE returns the address of where the module is loaded. 
  79. '
  80. M0DULE_ADDRESS=Param
  81. '
  82. 'Now, we play the module!
  83. '
  84. _PLAY_MODULE[MED_LIB_POINTER,M0DULE_ADDRESS]
  85. '
  86. ' When the user presses a key to stop the song, we fade (dim_off) out. 
  87. '
  88. _DIM_OFF_PLAYER[MED_LIB_POINTER]
  89. '
  90. 'We now turn the Player off completely.
  91. '
  92. _STOP_PLAYER[MED_LIB_POINTER]
  93. '
  94. ' Clear the module out of memory.
  95. '
  96. _UNLOAD_MODULE[MED_LIB_POINTER,M0DULE_ADDRESS]
  97. '
  98. ' Clear the player from memory 
  99. '
  100. _FREE_PLAYER[MED_LIB_POINTER]
  101. '
  102. ' That's all there is to it....Now, go back to the module selector...
  103. '
  104. Goto BEGINNING
  105. '**************************************************************
  106. '*                   Procedures                               *
  107. '**************************************************************
  108. Procedure CL0SELIBRARY
  109.    Shared MED_LIB_POINTER,CL0SE_LIBRARY
  110.    Areg(1)=MED_LIB_POINTER
  111.    R=Execall(CL0SE_LIBRARY)
  112.    Fade 3 : Wait 45
  113.    ERASBANK
  114. End Proc
  115. Procedure ERASBANK
  116.    Erase 6 : Erase 1
  117. End Proc
  118. Procedure OPENLIBRARY
  119.    Shared OPEN_LIBRARY,MED_LIB_POINTER
  120.    LIB_NAME$="medplayer.library"+Chr$(0)
  121.    Areg(1)=Varptr(LIB_NAME$)
  122.    Dreg(0)=0
  123.    R=Execall(OPEN_LIBRARY)
  124.    If R=0
  125.       Cls 
  126.       Centre "Library opening failed.  Press any key to exit"
  127.       Wait Key : ERASBANK
  128.       For HEYBER=9 To 15
  129.          Erase HEYBER
  130.       Next HEYBER
  131.       Run "amoner005:autoexec.amos"
  132.    Else 
  133.       MED_LIB_POINTER=R
  134.    End If 
  135. End Proc
  136. Procedure _SMALL_COPYRIGHT[YDISPLAY]
  137.    '
  138.    Auto View Off 
  139.    '  
  140.    Screen Open 7,320,24,16,0 : Curs Off : Flash Off : Cls 0
  141.    Screen Display 7,,-100,,
  142.    Paste Bob 260,3,1
  143.    Paper 0 : Pen 7 : Print At(1,1);"This program was written using"
  144.    Get Sprite Palette 
  145.    View : Wait Vbl 
  146.    '
  147.    For Y=1 To Screen Height/2
  148.       Screen Display 7,,YDISPLAY+Screen Height/2-Y,,Y*2
  149.       Screen Offset 7,,Screen Height/2-Y
  150.       View : Wait Vbl 
  151.    Next 
  152.    '
  153.    Wait 100
  154.    '
  155.    For Y=Screen Height/2 To 0 Step -1
  156.       Screen Display 7,,YDISPLAY+Screen Height/2-Y,,Y*2
  157.       Screen Offset 7,,Screen Height/2-Y
  158.       View : Wait Vbl 
  159.    Next 
  160.    '
  161.    Screen Close 7
  162.    Auto View On 
  163.    '
  164. End Proc
  165. Procedure _GET_PLAYER[LIB_POINTER]
  166.    Dreg(0)=0
  167.    Areg(2)=LIB_POINTER
  168.    Call 9
  169.    R=Dreg(0)
  170.    If R<>0
  171.       Cls 
  172.       Centre "GetPlayer Failed.  Press any key to exit"
  173.       Wait Key 
  174.       CL0SELIBRARY
  175.       For HEYBER=9 To 15
  176.          Erase HEYBER
  177.       Next HEYBER
  178.       Run "amoner005:autoexec.amos"
  179.    End If 
  180. End Proc
  181. Procedure _LOAD_MODULE[LIB_POINTER,M0D_POINTER]
  182.    Areg(0)=M0D_POINTER
  183.    Areg(1)=M0D_POINTER
  184.    Areg(2)=LIB_POINTER
  185.    Call 13
  186.    M0D_ADDRESS=Dreg(0)
  187.    If M0D_ADDRESS=0
  188.       Cls 
  189.       Centre "Failed to load module.  Press any key to try again."
  190.       Wait Key 
  191.       _FREE_PLAYER[MED_LIB_POINTER]
  192.    End If 
  193. End Proc[M0D_ADDRESS]
  194. Procedure _DIM_OFF_PLAYER[LIB_POINTER]
  195.    Areg(2)=LIB_POINTER
  196.    Dreg(1)=60
  197.    Dreg(0)=60
  198.    Call 15
  199.    Timer=0
  200.    Repeat 
  201.    Until Timer>582
  202. End Proc
  203. Procedure _PLAY_MODULE[LIB_POINTER,M0D_ADDRESS]
  204.    Areg(2)=LIB_POINTER
  205.    Areg(1)=M0D_ADDRESS
  206.    Areg(0)=M0D_ADDRESS
  207.    Call 10
  208.    Locate 0,24
  209.    Centre "Press key to stop song"
  210.    Wait Key 
  211. End Proc
  212. Procedure _STOP_PLAYER[LIB_POINTER]
  213.    Areg(2)=LIB_POINTER
  214.    Call 11
  215. End Proc
  216. Procedure _UNLOAD_MODULE[LIB_POINTER,M0D_ADDRESS]
  217.    Areg(0)=M0D_ADDRESS
  218.    Areg(1)=M0D_ADDRESS
  219.    Areg(2)=LIB_POINTER
  220.    Call 14
  221. End Proc
  222. Procedure _FREE_PLAYER[LIB_POINTER]
  223.    Areg(2)=LIB_POINTER
  224.    Call 12
  225.    Led On : Cline 
  226. End Proc